import { createRouter, createWebHistory, type RouteRecordName } from "vue-router";
import store from "@store/index";
import publicRoutes from "./routes/publicRoutes";
import adminRoutes from "./routes/adminRoutes";

const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
   routes: [...publicRoutes],
});

/* 路由权限A方案：挂载所有路由 + 全局路由守卫判断权限 */
// router.beforeEach((to, from, next) => {
//    if (to.meta.adminRequired) {
//       // 是管理员就放行
//       if (store.state.user && store.state.user.admin) {
//          next();
//       } else {
//          // 否则踹到登录页
//          next({ name: "login" });
//       }
//    } else {
//       // 不需要管理员权限直接放行
//       next();
//    }
// });

/* 路由权限B方案：挂载公共路由 + 全局路由守卫判断权限 + 动态挂载权限路由表 */
router.beforeEach((to, from, next) => {
   console.log("beforeEach",(store.state as StoreState).user);

   // 如果发现是管理员，就动态挂载管理员路由
   if ((store.state as StoreState).user && (store.state as StoreState).user!.admin) {
      // 如果权限路由表未挂载就挂载之
      adminRoutes.forEach(r => {
         // 未挂载就挂载
         if (!router.hasRoute(<RouteRecordName><unknown>r)) {
            router.addRoute(r);
            console.log(`挂载${r}完毕`);
         } else {
            console.log(`${r}已挂载`);
         }
      });
   }

   // 放行
   console.log("放行", to);
   next();
});

export default router;
